package net.solvetheriddle.demo.snake.framework;

import java.util.ArrayList;
import java.util.List;

public class Pool<T> {
  public interface PoolObjectFactory<T> {
    public T createObject();
  }

  private final List<T> freeObjects;
  private final PoolObjectFactory<T> factory;
  private final int maxSize;

  public Pool(PoolObjectFactory<T> factory, int maxSize) {
    this.factory = factory;
    this.maxSize = maxSize;
    this.freeObjects = new ArrayList<T>(maxSize);
  }

  public T newObject() {
    T object = null;
    if (freeObjects.size() == 0)
      object = factory.createObject();
    else
      object = freeObjects.remove(freeObjects.size() - 1);
    return object;
  }
  
  public void free(T object) {
    if (freeObjects.size() < maxSize)
    freeObjects.add(object);
    }
}
